package com.ruubypay.biz.mvc.api.validation;

import com.ruubypay.biz.mvc.api.model.request.*;
import com.ruubypay.biz.mvc.api.model.response.OutGoingDetail;
import com.ruubypay.biz.mvc.api.model.response.ProcessDetails;
import com.ruubypay.web.common.code.ResultCode;
import com.ruubypay.web.common.code.ResultEntity;
import com.ruubypay.web.common.utils.StringUtils;

import java.util.List;

/**
 * 校验规则类
 * @author 负责request各个业务的入参校验
 */
public class RequestValidation {

    /**
     * 流程任务跟踪信息
     * @param queryProcessInfo 查询流程任务跟踪信息的入参数实体
     * @param resultEntity 包装响应
     * @return 返回验证结果
     */
    public boolean validateProcessInfoQuery(QueryProcessInfo queryProcessInfo, ResultEntity<ProcessDetails> resultEntity) {
        if(StringUtils.isBlank(queryProcessInfo.getProcessInstanceId())){
            resultEntity.setCodeMsg(ResultCode.NO_PROCESS_INSTANCE_ID);
            return false;
        }
        return true;
    }

    /**
     * 校验任务签收的参数是否合法
     * @param claimTask 任务签收请求实体
     * @param resultEntity 任务签收响应实体
     * @return 返回参数是否合法
     */
    public boolean validateClaimTask(ClaimTask claimTask, ResultEntity<String> resultEntity) {
        if(StringUtils.isBlank(claimTask.getTaskId())){
            resultEntity.setCodeMsg(ResultCode.TASK_NO_ID);
            return false;
        }
        if(StringUtils.isBlank(claimTask.getUserName())){
            resultEntity.setCodeMsg(ResultCode.NO_CLAIM_USER);
            return false;
        }
        return true;
    }

    /**
     * 校验提交任务时的参数是否合法
     * @param submitTask 提交任务VO
     * @param resultEntity 封装结果
     * @return 返回是否校验通过
     */
    public boolean validateSubmitTask(SubmitTask submitTask, ResultEntity<String> resultEntity) {

        if(StringUtils.isBlank(submitTask.getTaskId())){
            resultEntity.setCodeMsg(ResultCode.TASK_NO_ID);
            return false;
        }
        if(StringUtils.isBlank(submitTask.getProcessInstanceId())){
            resultEntity.setCodeMsg(ResultCode.NO_PROCESS_INSTANCE_ID);
            return false;
        }
        return true;
    }

    /**
     * 校验发起流程的方式是否正确
     * @param startProcess 发起流程的参数
     * @param resultEntity 封装结果
     * @return 返回结果
     */
    public boolean validateStartProcess(StartProcess startProcess, ResultEntity<String> resultEntity) {

        if(StringUtils.isBlank(startProcess.getStartUserName())){
            resultEntity.setCodeMsg(ResultCode.COMMON_NO_START_USER);
            return false;
        }
        if(StringUtils.isBlank(startProcess.getKey())){
            resultEntity.setCodeMsg(ResultCode.COMMON_NO_PROCESS_KEY);
            return false;
        }
        //不和业务关联的流程没有意义
        if(StringUtils.isBlank(startProcess.getBusinessKey())){
            resultEntity.setCodeMsg(ResultCode.COMMON_NO_PROCESS_BUSINESS_KEY);
            return false;
        }
        return true;
    }

    /**
     * 校验获取连线入参的请求合法性
     * @param queryOutGoingLines 查询Vo类
     * @param resultEntity 封装返回对象
     * @return 返回校验是否通过
     */
    public boolean validateOutGoingsLinesQuery(QueryOutGoingLines queryOutGoingLines, ResultEntity<List<OutGoingDetail>> resultEntity) {
        if(StringUtils.isBlank(queryOutGoingLines.getTaskId())){
            resultEntity.setCodeMsg(ResultCode.TASK_NO_ID);
            return false;
        }
        return true;
    }

    /**
     * 校验任务指派参数合法性
     * @param assignedTask 任务指派对象
     * @param resultEntity 封装返回对象
     * @return 校验结果
     */
    public boolean validateAssigneTask(AssignedTask assignedTask, ResultEntity<String> resultEntity) {
        if(StringUtils.isBlank(assignedTask.getTaskId())){
            resultEntity.setCodeMsg(ResultCode.TASK_NO_ID);
            return false;
        }
        if(StringUtils.isBlank(assignedTask.getUsers())){
            resultEntity.setCodeMsg(ResultCode.TASK_ASSIGNED_NO_USER);
            return false;
        }
        return true;
    }
}
